Today, there are many applications that are written in general purpose programming languages. A desired characteristic of these applications is platform independence. That is, an application can be written once and executed on multiple computer platforms. With the advent of the Internet and widespread use of web application and browsing, such applications have become widely accepted. For example, languages, such as JAVA, have become very successful with server-side applications, such as web services, or servlets.
Platform independence for an application written in a general purpose programming language is achieved by compiling the language code “halfway” into an intermediate form known as byte code. A special program, known as a byte code interpreter, runs on the host computer system. The byte code interpreter implements a virtual machine on which the byte code is interpreted. Alternatively the byte code can be translated into usable native code that can be executed by the host computer system. Standardized libraries may also be installed on a host computer system to provide access to features, such as graphics and networking.
Unfortunately, applications that are compiled into byte code suffer from high startup overhead and may consume a large amount of resources during operation. When a user runs multiple JAVA applications concurrently in different instances of the JAVA virtual machine (JVM), there tends to be substantial duplication of effort in each JVM. For example, when multiple applications are executed concurrently, each has to load, parse, verify, and create runtime representations of all the applications' classes, even such common ones as java.lang.Object. Application start-up time, memory footprint, and raw execution time are thus negatively impacted. Developers who try to circumvent the problem by using class loaders soon discover that they provide inadequate inter-application isolation and make it difficult to cleanly terminate applications.
Accordingly, it may be desirable to provide systems and methods that can efficiently run interpreted language applications. It may also be desirable to provide systems and methods that can efficiently startup interpreted language applications.